﻿using System;

namespace GameDesigner
{
    /// <summary>
    /// 状态行为脚本 v2017/12/6 - 2020.6.7
    /// </summary>
    [Serializable]
    public class StateBehaviour : BehaviourBase
    {
        /// <summary>
        /// <para>当状态进入, 当动作循环时, 也不会每一次都会调用, 只会进入一次</para>
        /// 当动作是循环时, 此方法和 <see cref="OnExit"/> 是对应关系, 不管多少次循环, 只会在第一次进入触发 <see cref="OnFirstEnter"/> 和最后退出时触发 <see cref="OnExit"/>
        /// </summary>
        public virtual void OnFirstEnter() { }

        /// <summary>
        /// <para>当状态进入时, (如果是动作循环, 则每个动画循环周期都会再次调用)</para>
        /// 当动作是循环时, 此方法和 <see cref="OnActionExit"/> 是对应关系, 每个动画循环周期都会进入 <see cref="OnEnter"/> 和触发 <see cref="OnActionExit"/>
        /// </summary>
        public virtual void OnEnter() { }

        /// <summary>
        /// 当状态每一帧
        /// </summary>
        public virtual void OnUpdate() { }

        /// <summary>
        /// 当状态晚于更新
        /// </summary>
        public virtual void OnLateUpdate() { }

        /// <summary>
        /// 当状态固定更新
        /// </summary>
        public virtual void OnFixedUpdate() { }

        /// <summary>
        /// 当状态退出后
        /// </summary>
        public virtual void OnExit() { }

        /// <summary>
        /// 当停止动作 : 当动作不使用动画循环时, 动画时间到达100%后调用
        /// </summary>
        public virtual void OnStop() { }

        /// <summary>
        /// 当动作处于循环模式时, 子动作动画每次结束都会调用一次
        /// </summary>
        public virtual void OnActionExit() { }
    }
}